package com.knav.inject;

import android.app.Activity;
import android.content.Context;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import com.knav.inject.Base.Find;
import com.knav.inject.Exception.NoSuchFindException;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;


public class FindHandle {



    Class<? extends AppCompatActivity> getFindClazz(){
        Class<? extends AppCompatActivity> aClass = AppCompatActivity.class;
        return  aClass;
    }

    void dispatcherActivitFind(Field[] fields, Activity activity) throws NoSuchFindException {
//        Log.e("TAG", "dispatcherAppCompatActivitFind: " + fields.length);
        // 记录上一个字段的类型
        String preFieldType = fields[0].getType().getName();
        // 资源ID的下标
        int i = 0;

        for (Field field : fields) {
            Find annotation = field.getAnnotation(Find.class);
            /**
             * 上一个类型和当前这个类型不等 就回溯归0
             */
            if (!preFieldType.equals(field.getType().getName())) {
                i = 0;
            }
            if (annotation == null) {
                continue;
            }

            try {
                Object warpView = Activity.class.getMethod("findViewById", int.class).invoke(activity, annotation.ResId()[i]);
                field.set(field, warpView);
                i++; // 否是就加1
                preFieldType = field.getType().getName(); // 记录当前类型。
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    void dispatcherAppCompatActivitFind(Field[] fields, Activity activity) throws NoSuchFindException {
        Log.e("TAG", "dispatcherAppCompatActivitFind: "+fields.length );

        // 记录上一个字段的类型
        String preFieldType = "";
        // 资源ID的下标
        int i = 0 ;

        for (Field field : fields) {
            Find annotation = field.getAnnotation(Find.class);
            /**
             * 上一个类型和当前这个类型不等 就回溯归0
             */
            if (!preFieldType.equals(field.getType().getName())){
               i = 0 ;
            }
            if (annotation == null){
                return;
            }

            try {
                field.setAccessible(true);
                //TODO 解决 类型转换
                Constructor<?> constructor = field.getType().getConstructor(Context.class);
                Object warpView = Activity.class.getMethod("findViewById", int.class).invoke(activity,annotation.ResId()[i]);
                field.set(field ,warpView );
                i++; // 否是就加1
                preFieldType = field.getType().getName(); // 记录当前类型。
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
